#include "Chat.h"
#include <iostream>
using std::string;
using std::list;
using std::cerr;
using std::endl;
Chat::Chat() {
  this->lista_sockets_chat = NULL;
}
void Chat::set_lista_sockets_chat(list<Socket*>* lista) {
  this->lista_sockets_chat = lista;
}
void Chat::enviar_mensaje(string nombreUsuario, string texto) {
  this->mutex.lock();
  char cod_op = 'F';
  string texto_a_enviar;
  texto_a_enviar = nombreUsuario + ": " + texto;
  int tam_arg = texto_a_enviar.size() + 1;
  // Retransmitir mensaje a todos los sockets de chat
  std::list<Socket*>::iterator it;
  for (it = this->lista_sockets_chat->begin(); it != this->lista_sockets_chat->end(); it++) {
    if(!(*it)->enviar(&cod_op, sizeof(cod_op))) {
      std::cerr << "No se pudo enviar el codigo" << std::endl;
      break;
    }
    if(!(*it)->enviar(&tam_arg, sizeof(tam_arg))) {
      std::cerr << "No se pudo enviar el tamanio" << std::endl;
      break;
    }
    if(!(*it)->enviar(texto_a_enviar.c_str(), tam_arg)) {
      std::cerr << "No se pudo enviar el bloque de argumentos" << std::endl;
      break;
    }
  }
  this->mutex.unlock();
}
void Chat::enviar_codigo_fin_clase() {
  this->mutex.lock();
  char cod_op = 'X';
  int tam_arg = 0;
// Retransmitir mensaje a todos los sockets de chat
  std::list<Socket*>::iterator it;
  for (it = this->lista_sockets_chat->begin(); it != this->lista_sockets_chat->end(); it++) {
    if(!(*it)->enviar(&cod_op, sizeof(cod_op))) {
      std::cerr << "No se pudo enviar el codigo" << std::endl;
      break;
    }
    if(!(*it)->enviar(&tam_arg, sizeof(tam_arg))) {
      std::cerr << "No se pudo enviar el tamanio" << std::endl;
      break;
    }
  }
  this->mutex.unlock();
}
Chat::~Chat() {
}
